// main.js

// 控制应用生命周期和创建原生浏览器窗口的模组
const { app, BrowserWindow,ipcMain,dialog,Tray ,Menu} = require('electron');
const path = require('path');
const {createMsgWindow} = require('./msgWin.js');
const NODE_ENV = process.env.NODE_ENV;
const remote = require("@electron/remote/main");
var package = require("../package.json");

remote.initialize();
//...
// remote.enable(mainWindow.webContents)
let tray = null;
function createWindow () {
    // 创建浏览器窗口
    const mainWindow = new BrowserWindow({
        width:1366,
        height:768,
        minWidth:1280,
        minHeight:720,
        frame: false,
        webPreferences: {
            nodeIntegration: true,
            contextIsolation:false,
            enableRemoteModule: true,
            preload: path.join(__dirname, 'preload.js'),
        }
    })

    // 加载 index.html
    mainWindow.loadURL(
        NODE_ENV === 'development'
            ? 'http://localhost:3000'
            :`file://${path.join(__dirname, '../dist/index.html')}`
    );// 此处跟electron官网路径不同，需要注意

    // 打开开发工具
    //mainWindow.webContents.openDevTools()
    // 打开开发工具
    if (NODE_ENV === "development") {
        mainWindow.webContents.openDevTools();
    }

    remote.enable(mainWindow.webContents);


    // //显示窗口就不显示最小托盘
    // mainWindow.on('show', (event) => {
    //     // if(tray !== null) {
    //     //     tray.destroy();
    //     // }
    // });

    //隐藏窗口显示最小托盘
    // mainWindow.on('hide', (event) => {
    //     if(tray !== null) {
    //         tray.destroy();
    //     }
    //     tray = new Tray(path.join(__dirname, 'icon.ico'));
    //     tray.setToolTip('Electron Tray');
    //     const contextMenu = Menu.buildFromTemplate([
    //         {
    //             label: '打开',
    //             click: () => {toggleShoworHhide(mainWindow);}
    //         },
    //         {
    //             label: '退出',
    //             click: () => {if (process.platform !== 'darwin') app.quit();}
    //         }
    //     ]);
    //     tray.setContextMenu(contextMenu);
    //     tray.on('double-click', () => {
    //         toggleShoworHhide(mainWindow);
    //     });
    // });



    tray = new Tray(path.join(__dirname, 'icon.ico'));
    tray.setToolTip('Electron Tray');
    const contextMenu = Menu.buildFromTemplate([
        {
            label: '打开',
            click: () => {toggleShoworHhide(mainWindow);}
        },
        {
            label: '退出',
            click: () => {if (process.platform !== 'darwin') app.quit();}
        }
    ]);
    tray.setContextMenu(contextMenu);
    tray.on('double-click', () => {
        toggleShoworHhide(mainWindow);
    });
}

/**
 * 切换窗口显示隐藏
 * @param win BrowserWindow的实例
 */
function toggleShoworHhide(win){
    win.isVisible() ? win.hide() : win.show()
    win.isVisible() ? win.setSkipTaskbar(false) : win.setSkipTaskbar(true);
}

// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
// 由渲染进程触发
ipcMain.on('a',(e,data)=>{
    console.log('data',data);
    // 接收到渲染进程后，主进程会给渲染进程发送信息，不是针对所有窗口发送
    e.sender.send('b','主进程收到你的消息了,并告知你一声');
})


//打开文件选择框
ipcMain.on('OpenTheFileSelectionBox',async (e)=>{
    const { canceled, filePaths } = await dialog.showOpenDialog({
        // properties: ['openFile'],
        properties: ['openDirectory']
    });
    if (canceled) {
        return;
    } else {
        e.sender.send('OpenTheFileSelectionBoxCall',filePaths[0]);
    }
});


/**
 * 关闭程序
 */
ipcMain.on('closeProgress',async (e,data)=>{
    // e.sender.send('OpenTheFileSelectionBoxCall',filePaths[0]);
    if (process.platform !== 'darwin') app.quit();
});

/**
 * 最小托盘
 */
ipcMain.on('miniTray',async (e,data)=>{
    let mainWindow = BrowserWindow.fromId(1);
    mainWindow.hide();
    mainWindow.setSkipTaskbar(true);
});




app.whenReady().then(() => {
    createWindow();
    createMsgWindow();

    app.on('activate', function () {
        // 通常在 macOS 上，当点击 dock 中的应用程序图标时，如果没有其他
        // 打开的窗口，那么程序会重新创建一个窗口。
        if (BrowserWindow.getAllWindows().length === 0) createWindow()
    })
})
app.on('window-all-closed', function () {
    if (process.platform !== 'darwin') app.quit()
})

const gotTheLock = app.requestSingleInstanceLock()
if (!gotTheLock) {
    app.quit()
}



/**
 * 获取package.json
 */
ipcMain.on('getPackage',async (e,data)=>{
    e.sender.send('getPackageCall',package);
});

